CPU Sim is a software development environment for the simulation of simple computers. It was developed by Dale Skrien to help students understand computer architectures. With this application the user is able to simulate new or existing simple CPUs. Users can create new virtual CPUs with custom machine language instructions, which are implemented by a sequence of micro instructions. CPU Sim allows the user to edit and run assembly language programs for the CPU being simulated.
CPU Sim has been programmed using the Java Swing package. This means it's platform independent (runs on every platform that has a Java virtual machine installed).
Developer(s) | Dale Skrien |
---|---|
Stable release | 3.6.7 |
Development status | Under continued development |
Written in | Java |
Operating system | MS-Windows, Linux, Mac (Cross-platform) |
Type | IDE |
License | freeware |
Website | http://www.cs.colby.edu/djskrien/CPUSim/ |
Contents |
A sample computer system, the Wombat 1, is provided with CPU Sim. It has the following registers:
- pc (program counter);
- acc (accumulator);
- ir (instruction register);
- mar (memory address register);
- mdr (memory data register);
- status.
The assembly language of the Wombat 1 computer consists of 12 instructions. Each instruction is stored on 16 bit's, the first 4 are the Opcode and the other 12 are the address field.
Mnemonic | Operation code | Field length | Meaning |
---|---|---|---|
stop | 0 | 16 | stops the program execution |
load | 1 | 4 12 | transfers data from memory to the accumulator |
store | 2 | 4 12 | transfers data from the accumulator to the memory |
read | 3 | 4 (12) | puts the data from the IO console to the accumulator |
write | 4 | 4 (12) | sends to the IO console the data from the accumulator |
add | 5 | 4 12 | add the data from memory to the accumulator and the result is then stored in the accumulator |
subtract | 6 | 4 12 | subtracts the data from memory from the accumulator and the result is then stored in the accumulator |
multiply | 7 | 4 12 | multiplies the data from the memory by the accumulator and the result is then stored in the accumulator |
divide | 8 | 4 12 | divides the data from the memory into the accumulator and the result is then stored in the accumulator |
jmpz | 9 | 4 12 | jump to address if the accumulator is 0 |
jmpn | A | 4 12 | jump to address if the accumulator is negative |
jmp | B | 4 12 | unconditioned jump to address |
CPU Sim has the following features:
This program reads in integers until a negative integer is read. It then outputs the sum of all the positive integers.
Start: read // read n -> acc jmpn Done // jump to Done if n < 0. add sum // add sum to the acc store sum // store the new sum jump Start // go back & read in next number Done: load sum // load the final sum write // write the final sum stop // stop sum: .data 2 0 // 2-byte location where sum is stored
The following modification of the program is also used sometimes:
Start: read // read n -> acc jmpz Done // jump to Done if n is not 0. add sum // add sum to the acc store sum // store the new sum jump Start // go back & read in next number Done: load sum // load the final sum write // write the final sum stop // stop sum: .data 2 0 // 2-byte location where sum is stored
this one can use negative input to subtract, or 0 to break the loop.
The newest version is 3.6.7. This version will run on Java 1.5 or later.
CPU Sim is a free application. You can download the latest version from the web address http://www.cs.colby.edu/djskrien/CPUSim/